/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package modelo;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
/**
 *
//// * @author Elias Mendoza
 */
@Entity
@Table(name="sustrato")
public class Sustrato implements Serializable{
  @Id
  @GeneratedValue(strategy= GenerationType.IDENTITY)
  private int id;
  @Column(nullable=false)
  private String constitucion;
  @Column(nullable=false)
  private String descripcion;
  @Column(nullable=false)
  private String nombre;
  @Column(name="ult_mod")
  @Temporal(TemporalType.DATE)
  private Date ultimaModificacion;
  
  //********Creando relacion M:1 entre sustrato y refeencia_sustrato(muchos sustratos una referencia_sustrato)        
  @JoinColumn(name="referencia_id",referencedColumnName="id",nullable=false)
  @ManyToOne
  private Referencia referencia;
  //********************************************************************************
  //*********Creando relacion 1:M entre sustrato y grpo (un sustrato muchos grupo)
  @OneToMany(cascade= CascadeType.ALL,mappedBy="sustrato")
  private List<Grupo> grupo;
  //********************************************************************************
  @OneToMany(cascade= CascadeType.ALL,mappedBy="primaryKey.sustratoFK")
  private List<SustratoNave> sustratoNave;
  //********************************************************************************
  //********************************************************************************
  @OneToMany(cascade= CascadeType.ALL,mappedBy="primaryKey.sustratoFK")
  private List<ProductoSustrato> productoSustrato;
  //********************************************************************************

//  @OneToMany(cascade= CascadeType.ALL,mappedBy="")
  @OneToMany(cascade= CascadeType.ALL,mappedBy="sustrato")
  private List<Lectura> lectura;
  
  
  public Sustrato() {
  }

  public Sustrato(int id) {
    this.id = id;
  }

  public List<Lectura> getLectura() {
    return lectura;
  }

  public void setLectura(List<Lectura> lectura) {
    this.lectura = lectura;
  }

  public List<ProductoSustrato> getProductoSustrato() {
    return productoSustrato;
  }

  public void setProductoSustrato(List<ProductoSustrato> ProductoSustrato) {
    this.productoSustrato = ProductoSustrato;
  }

  public List<SustratoNave> getSustratoNave() {
    return sustratoNave;
  }

  public void setSustratoNave(List<SustratoNave> sustratoNave) {
    this.sustratoNave = sustratoNave;
  }

  public Referencia getReferencia() {
    return referencia;
  }

  public void setReferencia(Referencia referencia) {
    this.referencia = referencia;
  }

  public List<Grupo> getGrupo() {
    return grupo;
  }

  public void setGrupo(List<Grupo> grupo) {
    this.grupo = grupo;
  }
  
  public String getConstitucion() {
    return constitucion;
  }

  public void setConstitucion(String constitucion) {
    this.constitucion = constitucion;
  }

  public String getDescripcion() {
    return descripcion;
  }

  public void setDescripcion(String descripcion) {
    this.descripcion = descripcion;
  }

  public int getId() {
    return id;
  }

  public void setId(int id) {
    this.id = id;
  }


  public String getNombre() {
    return nombre;
  }

  public void setNombre(String nombre) {
    this.nombre = nombre;
  }

  public Date getUltimaModificacion() {
    return ultimaModificacion;
  }

  public void setUltimaModificacion(Date ultimaModificacion) {
    this.ultimaModificacion = ultimaModificacion;
  }

  @Override
  public String toString() {
    return "Sustrato{" + "id=" + id + ", constitucion=" + constitucion + ", descripcion=" + descripcion + ", nombre=" + nombre + ", ultimaModificacion=" + ultimaModificacion + ", referenciaSustrato=" + referencia + '}';
  }
  
  //Espacio para metodos HashCode y equals

  @Override
  public boolean equals(Object obj) {
    if (obj == null) {
      return false;
    }
    if (getClass() != obj.getClass()) {
      return false;
    }
    final Sustrato other = (Sustrato) obj;
    if (this.id != other.id) {
      return false;
    }
    if (this.referencia != other.referencia && (this.referencia == null || !this.referencia.equals(other.referencia))) {
      return false;
    }
    if (this.grupo != other.grupo && (this.grupo == null || !this.grupo.equals(other.grupo))) {
      return false;
    }
    if (this.sustratoNave != other.sustratoNave && (this.sustratoNave == null || !this.sustratoNave.equals(other.sustratoNave))) {
      return false;
    }
    if (this.productoSustrato != other.productoSustrato && (this.productoSustrato == null || !this.productoSustrato.equals(other.productoSustrato))) {
      return false;
    }
    if (this.lectura != other.lectura && (this.lectura == null || !this.lectura.equals(other.lectura))) {
      return false;
    }
    return true;
  }

  @Override
  public int hashCode() {
    int hash = 3;
    hash = 61 * hash + this.id;
    hash = 61 * hash + (this.referencia != null ? this.referencia.hashCode() : 0);
    hash = 61 * hash + (this.grupo != null ? this.grupo.hashCode() : 0);
    hash = 61 * hash + (this.sustratoNave != null ? this.sustratoNave.hashCode() : 0);
    hash = 61 * hash + (this.productoSustrato != null ? this.productoSustrato.hashCode() : 0);
    hash = 61 * hash + (this.lectura != null ? this.lectura.hashCode() : 0);
    return hash;
  }


  
  
}
